<template>
  <Agreement :is-show="showAgreement" @update:is-show="change" />
</template>

<script setup>
import { onMounted, ref } from 'vue'
import Agreement from '@/components/Agreement/index.vue'
// 控制协议弹窗显示
const showAgreement = ref(false)
// 是否已经处理过协议
const agreementProcessed = ref(false)

onMounted(() => {
  // 只检查是否首次使用，不立即请求位置授权
  checkFirstUse()
})

// 检查是否首次使用
const checkFirstUse = () => {
  const hasAgreed = uni.getStorageSync('userAgreedToTerms')
  if (!hasAgreed) {
    showAgreement.value = true
  } else {
    showAgreement.value = false
    // 如果已经同意过协议，标记为已处理并请求位置授权
    agreementProcessed.value = true
    requestLocationAuth()
  }
}

// 更新协议弹窗显示
const change = (value) => {
  showAgreement.value = value

  // 当协议弹窗关闭且是因为用户同意了协议（而不是其他原因关闭）
  if (!value && !agreementProcessed.value) {
    // 标记为已处理
    agreementProcessed.value = true
    // 延迟一小段时间后请求位置授权，确保协议处理完成
    setTimeout(() => {
      requestLocationAuth()
    }, 300)
  }
}

// 请求位置授权
const requestLocationAuth = () => {
  // #ifdef MP-WEIXIN
  uni.authorize({
    scope: 'scope.userLocation',
    success: () => {
      console.log('地理位置授权成功')
      // 授权成功后，可以获取位置信息
      getLocation()
    },
    fail: (err) => {
      console.error('地理位置授权失败', err)
      // 授权失败，引导用户开启授权
      showLocationTips()
    },
  })
  // #endif
}

// 获取地理位置信息
const getLocation = () => {
  uni.getLocation({
    type: 'gcj02', // gcj02 为火星坐标系，适用于中国大陆地区
    success: (res) => {
      console.log('获取位置成功', res)
      // 存储位置信息
      uni.setStorageSync(
        'userLocation',
        JSON.stringify({
          latitude: res.latitude,
          longitude: res.longitude,
        }),
      )
    },
    fail: (err) => {
      console.error('获取位置失败', err)
    },
  })
}

// 显示位置授权提示
const showLocationTips = () => {
  uni.showModal({
    title: '位置授权',
    content: '为了提供更好的服务，请允许小程序获取您的位置信息',
    confirmText: '去设置',
    cancelText: '暂不授权',
    success: (res) => {
      if (res.confirm) {
        // 打开设置页面，引导用户开启授权
        uni.openSetting({
          success: (settingRes) => {
            console.log('设置页面打开成功', settingRes)
            if (settingRes.authSetting['scope.userLocation']) {
              getLocation()
            }
          },
        })
      }
    },
  })
}
</script>

<style scoped></style>
